package com.ahorresas.modelo.daos;

import com.ahorresas.conexion.Conexion;
import com.ahorresas.modelo.beans.LiquidacionBean;
import com.ahorresas.modelo.sqls.LiquidacionSql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class LiquidacionDao {
    
    Conexion conexion = new Conexion();
    Connection con;
    LiquidacionSql sql = new LiquidacionSql();
    
    public LiquidacionBean buscarLiquidacion(String idLiquidacion){
        con = conexion.getConexion();
        LiquidacionBean liquidacion = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.buscarLiquidacion());
            ps.setString(1, idLiquidacion);
            
            ResultSet resultado = ps.executeQuery();
            if(resultado.next()){
                liquidacion = new LiquidacionBean();
                liquidacion.setIdLiquidacion(resultado.getInt("id_liquidacion"));
                liquidacion.setFechaLiquidacion(resultado.getDate("fecha_liquidacion"));
                liquidacion.setCliente(resultado.getString("cliente"));
                liquidacion.setVigencia(resultado.getInt("vigencia"));
                liquidacion.setValorLiquidacion(resultado.getDouble("valor_liquidacion"));
                liquidacion.setIdAhorro(resultado.getInt("id_ahorro"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        finally{
            conexion.cerrarConexion(con);
        }
        return liquidacion;
    }
    
    public List<LiquidacionBean> listarLiquidaciones(){
        con = conexion.getConexion();
        List<LiquidacionBean> listaLiquidacions = new ArrayList<>();
        LiquidacionBean liquidacion = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.listarLiquidaciones());
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                liquidacion = new LiquidacionBean();
                liquidacion.setIdLiquidacion(resultado.getInt("id_liquidacion"));
                liquidacion.setFechaLiquidacion(resultado.getDate("fecha_liquidacion"));
                liquidacion.setCliente(resultado.getString("cliente"));
                liquidacion.setVigencia(resultado.getInt("vigencia"));
                liquidacion.setValorLiquidacion(resultado.getDouble("valor_liquidacion"));
                liquidacion.setIdAhorro(resultado.getInt("id_ahorro"));
                
                listaLiquidacions.add(liquidacion);
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally{
            conexion.cerrarConexion(con);
        }
        return listaLiquidacions;
    }
    
    public int crearLiquidacion(LiquidacionBean liquidacion){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.crearLiquidacion());
            ps.setDate(1, liquidacion.getFechaLiquidacion());
            ps.setString(2, liquidacion.getCliente());
            ps.setInt(3, liquidacion.getVigencia());
            ps.setDouble(4, liquidacion.getValorLiquidacion());
            ps.setInt(5, liquidacion.getIdAhorro());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        } 
        return resultado;
    }
    
    public int modificarLiquidacion(LiquidacionBean liquidacion){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.modificarLiquidacion());
            ps.setDate(1, liquidacion.getFechaLiquidacion());
            ps.setString(2, liquidacion.getCliente());
            ps.setInt(3, liquidacion.getVigencia());
            ps.setDouble(4, liquidacion.getValorLiquidacion());
            ps.setInt(5, liquidacion.getIdAhorro());
            ps.setInt(6, liquidacion.getIdLiquidacion());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
    
    public int eliminarLiquidacion(Integer idLiquidacion){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.eliminarLiquidacion());
            ps.setInt(1, idLiquidacion);
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
}